package com.raymond.client.session;

import com.raymond.client.config.ClientSocketConfig;
import com.raymond.client.connector.IConnector;

/**
 * 连接管理器
 *
 * @author :  raymond
 * @version :  V1.0
 * @date :  2022-10-26 17:31
 */
public interface SessionManager {
    /**
     * 创建一个session,持有channel
     *
     * @param name sessionName
     * @param socketConfig socketConfig
     * @return AbstractClientSession
     */
    AbstractClientSession createSession(String name, ClientSocketConfig socketConfig);

    /**
     * 获取地址的所有session
     * @param name 地址
     * @return AbstractClientSession
     */
    AbstractClientSession getChannelSession(String name);
    /**
     * 返回连接器
     *
     * @return 客户端连接器
     */
    IConnector getConnector();


    /**
     * 连接注销
     * @param session session
     * @throws InterruptedException InterruptedException
     */
    void shutdown(AbstractClientSession session) throws InterruptedException;

    /**
     * 连接注销
     * @param name name
     * @throws InterruptedException InterruptedException
     */
    void shutdown(String name) throws InterruptedException;

    /**
     * 注销所有连接
     * 并销毁连接器
     */
    void destroy() throws InterruptedException;



}
